package com.jack.nativeloadgif

import android.annotation.SuppressLint
import android.graphics.Bitmap

/**
 * @创建者 Jack
 * @创建时间 2023/12/20 19:37
 * @描述
 */
class GifLoadHelper {
    //6.指针类型
    var gifLoadHelper: Long = 0 //地址   指针类型    大小一样的 纽带

    init {
        System.loadLibrary("nativeloadgif")
    }

    companion object {
        @Volatile
        private var instance: GifLoadHelper? = null

        fun getInstance(): GifLoadHelper = instance ?: synchronized(this) {
            instance ?: GifLoadHelper().also { instance = it }
        }
    }

    fun getWidth(): Int {
        return getWidth(gifLoadHelper)
    }

    fun getHeight(): Int {
        return getHeight(gifLoadHelper)
    }

    fun updateFrame(bitmap: Bitmap): Int {
        return updateFrame(gifLoadHelper, bitmap)
    }

    //7.加载gif
    fun load(path: String) {
        this.gifLoadHelper  = loadGif(path)
    }

    //   1.开始加载gif文件  Java+包名+类名+方法名  中间分隔用下划线
    // native方法的参数   参数1： JNIEnv  参数2： 加了static 对应  class，不加则对应 对象  object  参数3：需要传递的参数
    private external fun loadGif(path: String): Long

    //    2.宽     需要将java层持有的地址 作为参数进行传递
    private external fun getWidth(gifLoadHelper: Long): Int

    //    3.高
    private external fun getHeight(gifPoint: Long): Int

    //    4.渲染图片
    // 补充：java层调用native层  两个层的线程关系
    // java 子线程 ---> native 子线程
    // java 主线程 ---> native 主线程
    // java 主/子线程，native自己开辟线程 ---> native 子线程
    private external fun updateFrame(gifPoint: Long, bitmap: Bitmap): Int
}